package com.jblv.frame.common.utils.bean;


import com.jblv.frame.common.enums.NameValueEnum;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;


/**
 * @author happyonion.yangtao
 * @version 1.0
 * @title FieldValueConvert
 * @projectName jblv-frame
 * @packageName com.jblv.frame.common.utils.bean
 * @description FieldValueConvert bean属性转换器注解（主要用于导出字段值转换等场景）
 * @date Create at 2020/6/4 0:21
 * @since jdk1.8
 */

@Target({FIELD})
@Retention(RUNTIME)
public @interface FieldValueConvert {
    /**
     * 重命名
     */
    String rename() default "";

    /**
     * 值转换器
     */
    Class<? extends FieldValueConverter> converter() default FieldValueConverter.class;

    /**
     * 枚举值转换,枚举类必须继承EnumValue接口
     */
    Class<? extends Enum<? extends NameValueEnum>> enumConverter() default DefaultEnum.class;

    enum DefaultEnum implements NameValueEnum<Integer> {
        ;

        @Override
        public Integer getValue() {
            return 0;
        }

        @Override
        public String getName() {
            return null;
        }
    }
}